package plgbasev0

//
///***
//   input
//*/
//type InnerEx struct {
//	objdna           uint32
//	TypeStr          string
//	plug             interface{}
//	plugID           string
//	subscribeTopic   string
//	task_topic       string
//	task_interval    int
//	task_intervalDNA int
//	templ            string // json 默认模版
//	jsonTempl        *wrapper.SuperValue
//	confIsChanged    bool   // 最后一次是否改变
//	ReleaseFlag      int
//}
//
//func NewInnerEx() *InnerEx {
//	return &InnerEx{}
//}
//
//func (this *InnerEx) ConfIsChanged() bool {
//	return this.confIsChanged;
//}
//
//func (this *InnerEx) Release() {
//	this.UnSubscribePre()
//	this.ReleaseFlag = 1
//	this.plug = nil
//}
//
//func (this *InnerEx) StatusString() string {
//	if this.plug == nil{
//		return fmt.Sprintf("%s(nil)", this.plugID)
//	}else{
//		return fmt.Sprintf("%s(%p)", this.plugID, this.plug)
//	}
//}
//
//func (this *InnerEx) SetPlug(val interface{}) {
//	this.plug = val
//	if val == nil {
//		return
//	}
//}
//
//func (this *InnerEx) CheckDNA() uint32 {
//	if this.objdna == 0 {
//		this.objdna = utils.NewObjectDNA()
//	}
//	return this.objdna
//}
//
//func (this *InnerEx) UnSubscribePre() {
//	if len(this.subscribeTopic) > 0 {
//		ex := this.checkGetPlug()
//		if ex == nil {
//			return
//		}
//		if sc, ok := ex.(utils.IUnSubscribe); ok {
//			sc.UnsubscribeChannel(this.subscribeTopic, this)
//		}else if sc, ok := ex.(IGetSubscriber); ok {
//			sc.GetSubscriber().UnsubscribeChannel(this.subscribeTopic, this)
//		} else if sc, ok := ex.(utils.SubscribeCenter); ok {
//			sc.UnsubscribeChannel(this.subscribeTopic, this)
//		} else {
//			return
//		}
//		this.subscribeTopic = ""
//	}
//
//}
//
//func (this *InnerEx) SubscribeFromConf(conf *wrapper.SuperValue, onInput utils.SubscribeCallback) (err error) {
//	if conf == nil{
//		return nil;
//	}
//
//	strTopic := conf.StringByName("topic", "")
//	ReplacePlaceholderForFileName(strTopic)
//
//	return this.Subscribe(strTopic, onInput)
//}
//
///***
//  可以重复执行, 如果topic和之前的不一致, 会先取消订阅之前的
// */
//func (this *InnerEx) Subscribe(topic string, onInput utils.SubscribeCallback) (err error) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//
//	if topic == this.subscribeTopic {
//		return
//	}
//
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//
//	this.UnSubscribePre()
//
//	this.subscribeTopic = topic;
//	if len(this.subscribeTopic) == 0{
//		return;
//	}
//
//	if sc, ok := ex.(utils.ISubscribe); ok {
//		sc.SubscribeChannel(topic, this, onInput)
//	}else if sc, ok := ex.(IGetSubscriber); ok {
//		sc.GetSubscriber().SubscribeChannel(topic, this, onInput)
//	} else if sc, ok := ex.(utils.SubscribeCenter); ok {
//		sc.SubscribeChannel(topic, this, onInput)
//	}
//	return nil
//}
//
///**
//  {
//      "interval":10,
//      "topic":"xxxx"
//  }
//*/
//func (this *InnerEx) ReloadTaskConf(conf *wrapper.SuperValue,
//	status_fn func(), status_fn_start func(), status_fn_shutdown func()) (err error) {
//
//	if conf == nil {
//		return
//	}
//
//	conf.CheckStrFunc("topic", func(strv string) {
//		this.task_topic = strv
//	})
//
//	conf.CheckExistsIntFunc("interval", func(val int64) {
//		if this.task_interval != int(val) {
//			this.task_intervalDNA++
//			if this.task_interval <= 0 { // 之前是关闭状态
//				if status_fn_start != nil {
//					status_fn_start()
//				}
//			}
//			this.task_interval = int(val)
//			if this.task_interval > 0 {
//				dna := this.task_intervalDNA
//				this.CheckDNA()
//				utils.AddTaskFxiedInterval(fmt.Sprintf("obj_%d", this.objdna),
//					time.Duration(this.task_interval)*time.Second, func() bool {
//						if dna != this.task_intervalDNA || this.ReleaseFlag == 1 {
//							if status_fn_shutdown != nil {
//								status_fn_shutdown()
//							}
//							return false
//						}
//						if status_fn != nil {
//							status_fn()
//						}
//						return true
//					})
//			} else {
//				if status_fn_shutdown != nil {
//					status_fn_shutdown()
//				}
//			}
//
//		}
//
//	})
//	return
//}
//
///**
//  {
//      "id":"ex",
//      "templ":{}
//  }
//*/
//func (this *InnerEx) ReloadConf(conf *wrapper.SuperValue) (err error) {
//	this.confIsChanged = false;
//	if conf == nil {
//		return
//	}
//
//	if conf.IsObject(){
//		conf.CheckStrFunc("id", func(strv string) {
//			if this.plugID != strv{
//				this.UnSubscribePre();
//				this.plugID = strv
//				ex := FindPluginByID(strv)
//				this.SetPlug(ex)
//				this.confIsChanged = true;
//			}
//		})
//
//		conf.CheckExistsStrFunc("templ", func(strv string) {
//			if this.templ != strv{
//				this.templ = strv
//				this.confIsChanged = true;
//			}
//		})
//
//		conf.CheckExistsStrFunc("topic", func(strv string) {
//			this.task_topic = strv;
//		})
//	}else{
//		if this.plugID != conf.String(){
//			this.UnSubscribePre();
//			this.plugID = conf.String()
//			ex := FindPluginByID(this.plugID)
//			this.SetPlug(ex)
//			this.confIsChanged = true;
//		}
//	}
//
//
//
//
//
//	return
//}
//
//
//func (this *InnerEx) checkGetPlug() interface{} {
//	ex := this.plug
//	if ex == nil {
//		ex = FindPluginByID(this.plugID)
//		if ex != nil {
//			this.plug = ex
//		}
//	}
//	return ex
//}
//
//func (this *InnerEx) OutputBufferTag(buffer []byte, tag interface{}) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//	if sc, ok := ex.(IDispatchData); ok {
//		sc.DispatchData(this.task_topic, this, buffer, tag)
//	} else if sc, ok := ex.(IGetSubscriber); ok {
//		sc.GetSubscriber().DispatchData(this.task_topic, this, buffer, tag)
//	} else if sc, ok := ex.(utils.SubscribeCenter); ok {
//		sc.DispatchData(this.task_topic, this, buffer, tag)
//	} else if sc, ok := ex.(ISendKVs); ok {
//		sc.SendKVs(this.task_topic, buffer)
//	}
//}
//
//func (this *InnerEx) OutputTaskBuffer(buffer []byte) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//	this.OutputBufferEx(buffer, nil, nil)
//}
//
//func (this *InnerEx) OutputBufferEx(buffer []byte, sender interface{}, tag interface{}) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//	if sc, ok := ex.(IDispatchData); ok {
//		sc.DispatchData(this.task_topic, sender, buffer, tag)
//	} else if sc, ok := ex.(IGetSubscriber); ok {
//		sc.GetSubscriber().DispatchData(this.task_topic, sender, buffer, tag)
//	} else if sc, ok := ex.(utils.SubscribeCenter); ok {
//		sc.DispatchData(this.task_topic, sender, buffer, tag)
//	} else if sc, ok := ex.(ISendKVs); ok {
//		sc.SendKVs(this.task_topic, buffer)
//	}
//}
//
//func (this *InnerEx) SendTopicBuffer(topic string, buffer []byte) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//	if sc, ok := ex.(IDispatchData); ok {
//		sc.DispatchData(topic, this, buffer, nil)
//	}else if sc, ok := ex.(ISendKVs); ok {
//		sc.SendKVs(topic, buffer)
//	}else{
//		golog.Warnf( "发送插件不支持ISendKVs")
//	}
//}
//
//func (this *InnerEx) DispatchData(topic string, sender interface{}, data interface{}, tag interface{}) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//
//	if len(this.templ) > 0 {
//		if json, ok := data.(*wrapper.SuperValue); ok {
//			jsonTempl := wrapper.NewSVObject()
//			jsonTempl.JsonParserFromByte([]byte(this.templ))
//			json.CopyFromRef(jsonTempl)
//		}
//	}
//
//
//	if sc, ok := ex.(IDispatchData); ok {
//		err := sc.DispatchData(topic, sender, data, tag)
//		if err != nil{
//			golog.Warnf("[%s]分发数据出现异常:%s", this.TypeStr, err.Error())
//		}
//	}else if sc, ok := ex.(ISendKVs); ok {
//		err := sc.SendKVs(topic, data)
//		if err != nil{
//			golog.Warnf("[%s]分发数据出现异常:%s", this.TypeStr, err.Error())
//		}
//	}else{
//		golog.Warnf( "发送插件不支持ISendKVs")
//	}
//}
//
//func (this *InnerEx) SendTaskTopic(fillStatus func(json *wrapper.SuperValue)) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//	this.SendTopic(this.task_topic, fillStatus)
//}
//
//
//func (this *InnerEx) SendTopic(topic string, fillStatus func(json *wrapper.SuperValue)) {
//	if this.ReleaseFlag == 1 {
//		return
//	}
//
//	ex := this.checkGetPlug()
//	if ex == nil {
//		return
//	}
//	if sc, ok := ex.(IDispatchData); ok {
//		json := wrapper.NewSVObject()
//		if len(this.templ) > 0 {
//			json.JsonParserFromByte([]byte(this.templ))
//		}
//		fillStatus(json)
//		err := sc.DispatchData(topic, this, json, nil)
//		if err != nil{
//			golog.Warnf("[%s]分发数据出现异常:%s", this.TypeStr, err.Error())
//		}
//	}else if sc, ok := ex.(ISendKVs); ok {
//		json := wrapper.NewSVObject()
//		if len(this.templ) > 0 {
//			json.JsonParserFromByte([]byte(this.templ))
//		}
//		fillStatus(json)
//		err := sc.SendKVs(topic, json)
//		if err != nil{
//			golog.Warnf("[%s]分发数据出现异常:%s", this.TypeStr, err.Error())
//		}
//	}else{
//		golog.Warnf( "发送插件不支持ISendKVs")
//	}
//}
